package com.zw.a.basic.a02.demo01_operator;

/*
    案例: 演示逻辑运算符入门.

    概述:
        逻辑运算符一般是用来连接 关系表达式的, 即: 用来做复合条件判断的.
    分类:
        &   逻辑与, 并且的意思, 类似于and, 要求所有的条件都得满足, 简单记忆: 有false则整体为false.
        |   逻辑或, 或者的意思, or, 记忆: 有true则整体为true
        !   逻辑非, 取反的意思, not, 记忆: 以前是true现在是false, 以前是false, 现在是true.
        ^   逻辑异或, 异同的意思, 相同为false, 不同为true.
 */
public class OperatorDemo02 {
    public static void main(String[] args) {
        //传统写法测试: 逻辑与
        int a = 10;
        int b = 5;
        System.out.println(a > 6 & b > 6);     //true & false -> false
        System.out.println(a > 6 & b < 6);     //true & true -> true
        System.out.println("---------------");
        //需求: 刘静找女朋友
        //一开始, 要求非常高, 必须长得漂亮, 还得身材好.
        System.out.println(true & true);        //true
        System.out.println(true & false);       //false
        System.out.println(false & true);       //false
        System.out.println(false & false);      //false
        System.out.println("---------------");

        //刘静发现这样的妹子不好找, 于是降低了要求, 只要长得漂亮, 或者身材好就行.
        System.out.println(true | true);        //true
        System.out.println(true | false);       //true
        System.out.println(false | true);       //true
        System.out.println(false | false);      //false
        System.out.println("---------------");

        //刘静发现这样的妹子不好找, 于是又降低了要求, 只要不是男的就行.
        System.out.println(!true);          //false
        System.out.println(!false);         //true
        //小技巧, 对同一个布尔结果, 偶数次取反, 其值不变.
        System.out.println(!!false);
        System.out.println("---------------");

        //刘静发现这样的妹子不好找, 最终还是找了个 汉子在一起了, 结果国内不认可.
        System.out.println(true ^ true);        //false
        System.out.println(true ^ false);       //true
        System.out.println(false ^ true);       //true
        System.out.println(false ^ false);      //false
    }
}
